package br.com.velp.sudecap.serviceimpl;

import br.com.velp.sudecap.comum.SpringConstants;
import br.com.velp.sudecap.dao.DireitoUsuarioDAO;
import br.com.velp.sudecap.dao.GrupoUsuarioDAO;
import br.com.velp.sudecap.entidade.DireitoSistema;
import br.com.velp.sudecap.entidade.GrupoUsuario;
import br.com.velp.sudecap.entidade.Usuario;
import br.com.velp.sudecap.service.GrupoUsuarioService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 06.11.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <requisitos_afetados> RF010.05 - Vincular Usuário ao Grupo </requisitos_afetados>
 * <descricao> Implementação da Interface Responsável Pelas Operações de 
 *             CRUD Referentes a Vinculação de Grupos / Usuários </descricao>
 * </sumario>
 */
@Service("grupoUsuarioService")
@Transactional(readOnly = true)
@Lazy(SpringConstants.LAZY_BEANS)
public class GrupoUsuarioServiceImpl implements GrupoUsuarioService {
    
    public static final Long serialVersionUID = 1L;
    
    @Autowired
    private GrupoUsuarioDAO grupoUsuarioDAO;
    
    @Autowired
    private DireitoUsuarioDAO direitoUsuarioDAO;

    @Override
    @Transactional(readOnly = false)
    public Long salvar(GrupoUsuario value) {
	return this.grupoUsuarioDAO.salvar(value);
    }

    @Override
    @Transactional(readOnly = false)
    public void atualizar(GrupoUsuario value) {
	this.grupoUsuarioDAO.atualizar(value);
    }

    @Override
    public GrupoUsuario obterPorId(Long id) {
	return this.grupoUsuarioDAO.obterPorId(id);
    }

    @Override
    @Transactional(readOnly = false)
    public void excluir(GrupoUsuario value) {
	this.grupoUsuarioDAO.excluir(value);
    }

    @Override
    public List<GrupoUsuario> obterTodosGruposUsuario() {
	return this.grupoUsuarioDAO.obterTodosGruposUsuario();
    }
    
    @Override
    public List<GrupoUsuario> obterTodosGruposSemInitialize(){
        return this.grupoUsuarioDAO.obterTodosGruposSemInitialize();
    }
    
    @Override
    public List<DireitoSistema> recuperarTodosDireitosSistema(){
	return this.direitoUsuarioDAO.recuperarTodosDireitosSistema();
    }
    
    @Override
    public List<DireitoSistema> recuperarDireitosVinculadosAoGrupo(GrupoUsuario grupo, String sistema){
	return this.grupoUsuarioDAO.recuperarDireitosVinculadosAoGrupo(grupo, sistema);
    }
    
    @Override
    public List<DireitoSistema> recuperarDireitosNotIn(List<DireitoSistema> direitos, String sistema){
	return this.grupoUsuarioDAO.recuperarDireitosNotIn(direitos, sistema);
    }
    
    @Override
    public List<Usuario> recuperarUsuariosDoSistema(){
	return this.direitoUsuarioDAO.recuperarTodosUsuarios();
    }

    @Override
    public void salvarAtualizarDireitosGrupo(GrupoUsuario grupo, List<DireitoSistema> direitos){
	this.grupoUsuarioDAO.salvarAtualizarDireitosGrupo(grupo, direitos);
    }

    @Override
    public boolean isGrupoJaCadastrado(Long codigo, String sistema) {
	return this.grupoUsuarioDAO.isGrupoJaCadastrado(codigo, sistema);
    }

    @Override
    public boolean isGrupoJaCadastrado(String nome, String sistema) {
	return this.grupoUsuarioDAO.isGrupoJaCadastrado(nome, sistema);
    }
    
    @Override
    public List<Usuario> obterUsuariosPorNomeGrupo(String nomeGrupo) {
        return this.grupoUsuarioDAO.obterUsuariosPorNomeGrupo(nomeGrupo);
    }
    
    public List<GrupoUsuario> recuperarGruposUsuarioPorSistema(String sistema) {
        return this.grupoUsuarioDAO.recuperarGruposUsuarioPorSistema(sistema);
    }
    
}
